<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Neptune Syntax</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
		<meta name="viewport" content="width=device-width initial-scale=1">
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<meta http-equiv="Content-Language" content="en-gb">

<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
  var popup = document.getElementById(material_id);
  popup.classList.toggle("show");
}
</script>

<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
		
	</head>
	<body class="commentary-font">
		<nav role="navigation">
		<h1><a href="../index.html"><img src="../docs-assets/Inform.png" height=72> </a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=0> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="https://github.com/ganelson/inweb"><img src="../docs-assets/github.png" height=0> inweb</a></li>
<li><a href="https://github.com/ganelson/intest"><img src="../docs-assets/github.png" height=0> intest</a></li>
</ul>
		</nav>
		<main role="main">
		<!-- Weave of 'Neptune Syntax' generated by inweb -->
<div class="breadcrumbs">
    <ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../services.html">Services</a></li><li><a href="index.html">kinds</a></li><li><a href="index.html#4">Chapter 4: Constructors</a></li><li><b>Neptune Syntax</b></li></ul></div>
<p class="purpose">To parse individual commands from Neptune files.</p>

<ul class="toc"><li><a href="4-ns.html#SP1">&#167;1. The command set</a></li><li><a href="4-ns.html#SP5">&#167;5. Parsing single kind commands</a></li></ul><hr class="tocbar">

<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. The command set.</b>Each different operation is defined with a block like so:
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind_command_definition</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text_of_command</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">opcode_number</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the </span><span class="extract"><span class="extract-syntax">*_KCC</span></span><span class="comment-syntax"> values below</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">operand_type</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the </span><span class="extract"><span class="extract-syntax">*_KCA</span></span><span class="comment-syntax"> values below</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">warning_if_used</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">kind_command_definition</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure kind_command_definition is accessed in 4/kc and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The operands have different types, and the possibilities are given here:
</p>

<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NO_KCA</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">   </span><span class="comment-syntax"> there's no operand</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax">     </span><span class="comment-syntax"> must be </span><span class="extract"><span class="extract-syntax">yes</span></span><span class="comment-syntax"> or </span><span class="extract"><span class="extract-syntax">no</span></span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CCM_KCA</span><span class="plain-syntax">         </span><span class="comment-syntax"> a constant compilation method</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">        </span><span class="comment-syntax"> any text (no quotation marks or other delimiters are used)</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VOCABULARY_KCA</span><span class="plain-syntax">  </span><span class="comment-syntax"> any single word</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax">     </span><span class="comment-syntax"> any decimal number</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax"> </span><span class="comment-syntax"> any valid kind number, such as "number"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEMPLATE_KCA</span><span class="plain-syntax">    </span><span class="comment-syntax"> the name of a template whose definition is given in the file</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">MACRO_KCA</span><span class="plain-syntax">       </span><span class="comment-syntax"> the name of a macro whose definition is given in the file</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">      </span><span class="comment-syntax"> an I6 compilation schema</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>And, to cut to the chase, here is the complete table of commands:
</p>

<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">apply_macro_KCC</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">invent_source_text_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">can_coincide_with_property_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">can_exchange_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">compatible_with_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">compare_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">comparison_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">constant_compilation_method_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">default_value_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">distinguish_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">documentation_reference_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">understand_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">forbid_assertion_creation_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">printing_routine_for_debugging_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">say_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_default_value_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_maximum_value_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_minimum_value_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">indexed_grey_if_empty_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">index_priority_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">conforms_to_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">is_incompletely_defined_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">loop_domain_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">modifying_adjective_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">long_block_size_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">flexible_long_block_size_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">plural_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">recognise_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">singular_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">specification_text_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">short_block_size_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">terms_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">instance_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">plus_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">minus_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">times_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">divide_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">remainder_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">approximate_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">negate_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">root_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cuberoot_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">power_schema_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">arithmetic_modulus_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">dimensionless_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">create_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">cast_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">copy_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">copy_short_block_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">quick_copy_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">destroy_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">make_mutable_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">hash_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">long_block_size_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">serialise_function_KCC</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">unserialise_function_KCC</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind_command_definition</span><span class="plain-syntax"> </span><span class="identifier-syntax">table_of_kind_commands</span><span class="plain-syntax">[] = {</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"can-coincide-with-property"</span><span class="plain-syntax">,     </span><span class="constant-syntax">can_coincide_with_property_KCC</span><span class="plain-syntax">,     </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"can-exchange"</span><span class="plain-syntax">,                   </span><span class="constant-syntax">can_exchange_KCC</span><span class="plain-syntax">,                   </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"indexed-grey-if-empty"</span><span class="plain-syntax">,          </span><span class="constant-syntax">indexed_grey_if_empty_KCC</span><span class="plain-syntax">,          </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"is-incompletely-defined"</span><span class="plain-syntax">,        </span><span class="constant-syntax">is_incompletely_defined_KCC</span><span class="plain-syntax">,        </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"multiple-block"</span><span class="plain-syntax">,                 -1,                                 </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax">,</span>
<span class="plain-syntax">      </span><span class="string-syntax">"'multiple-block: no' can be omitted; 'multiple-block: yes' should now be 'flexible-long-block-size: N' for some typical field count N"</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"long-block-size"</span><span class="plain-syntax">,                </span><span class="constant-syntax">long_block_size_KCC</span><span class="plain-syntax">,                </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"flexible-long-block-size"</span><span class="plain-syntax">,       </span><span class="constant-syntax">flexible_long_block_size_KCC</span><span class="plain-syntax">,       </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"forbid-assertion-creation"</span><span class="plain-syntax">,      </span><span class="constant-syntax">forbid_assertion_creation_KCC</span><span class="plain-syntax">,      </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"constant-compilation-method"</span><span class="plain-syntax">,    </span><span class="constant-syntax">constant_compilation_method_KCC</span><span class="plain-syntax">,    </span><span class="constant-syntax">CCM_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"comparison-routine"</span><span class="plain-syntax">,             </span><span class="constant-syntax">compare_function_KCC</span><span class="plain-syntax">,               </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">,</span>
<span class="plain-syntax">      </span><span class="string-syntax">"this command has been renamed 'compare-function'"</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"compare-function"</span><span class="plain-syntax">,               </span><span class="constant-syntax">compare_function_KCC</span><span class="plain-syntax">,               </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"default-value"</span><span class="plain-syntax">,                  </span><span class="constant-syntax">default_value_KCC</span><span class="plain-syntax">,                  </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"distinguishing-routine"</span><span class="plain-syntax">,         </span><span class="constant-syntax">distinguish_function_KCC</span><span class="plain-syntax">,           </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">,</span>
<span class="plain-syntax">      </span><span class="string-syntax">"this command has been renamed 'distinguish-function'"</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"distinguish-function"</span><span class="plain-syntax">,           </span><span class="constant-syntax">distinguish_function_KCC</span><span class="plain-syntax">,           </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"documentation-reference"</span><span class="plain-syntax">,        </span><span class="constant-syntax">documentation_reference_KCC</span><span class="plain-syntax">,        </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"parsing-routine"</span><span class="plain-syntax">,                </span><span class="constant-syntax">understand_function_KCC</span><span class="plain-syntax">,            </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">,</span>
<span class="plain-syntax">      </span><span class="string-syntax">"this command has been renamed 'understand-function'"</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"understand-function"</span><span class="plain-syntax">,            </span><span class="constant-syntax">understand_function_KCC</span><span class="plain-syntax">,            </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"printing-routine"</span><span class="plain-syntax">,               </span><span class="constant-syntax">say_function_KCC</span><span class="plain-syntax">,                   </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">,</span>
<span class="plain-syntax">      </span><span class="string-syntax">"this command has been renamed 'say-function'"</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"say-function"</span><span class="plain-syntax">,                   </span><span class="constant-syntax">say_function_KCC</span><span class="plain-syntax">,                   </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"printing-routine-for-debugging"</span><span class="plain-syntax">, -1,                                 </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">,</span>
<span class="plain-syntax">      </span><span class="string-syntax">"this command has been withdrawn"</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"index-default-value"</span><span class="plain-syntax">,            </span><span class="constant-syntax">index_default_value_KCC</span><span class="plain-syntax">,            </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"index-maximum-value"</span><span class="plain-syntax">,            </span><span class="constant-syntax">index_maximum_value_KCC</span><span class="plain-syntax">,            </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"index-minimum-value"</span><span class="plain-syntax">,            </span><span class="constant-syntax">index_minimum_value_KCC</span><span class="plain-syntax">,            </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"loop-domain-schema"</span><span class="plain-syntax">,             </span><span class="constant-syntax">loop_domain_schema_KCC</span><span class="plain-syntax">,             </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"recognition-routine"</span><span class="plain-syntax">,            </span><span class="constant-syntax">recognise_function_KCC</span><span class="plain-syntax">,             </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">,</span>
<span class="plain-syntax">      </span><span class="string-syntax">"this command has been renamed 'recognise-function'"</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"recognise-function"</span><span class="plain-syntax">,             </span><span class="constant-syntax">recognise_function_KCC</span><span class="plain-syntax">,             </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"specification-text"</span><span class="plain-syntax">,             </span><span class="constant-syntax">specification_text_KCC</span><span class="plain-syntax">,             </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"create-function"</span><span class="plain-syntax">,                </span><span class="constant-syntax">create_function_KCC</span><span class="plain-syntax">,                </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"cast-function"</span><span class="plain-syntax">,                  </span><span class="constant-syntax">cast_function_KCC</span><span class="plain-syntax">,                  </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"copy-function"</span><span class="plain-syntax">,                  </span><span class="constant-syntax">copy_function_KCC</span><span class="plain-syntax">,                  </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"copy-short-block-function"</span><span class="plain-syntax">,      </span><span class="constant-syntax">copy_short_block_function_KCC</span><span class="plain-syntax">,      </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"quick-copy-function"</span><span class="plain-syntax">,            </span><span class="constant-syntax">quick_copy_function_KCC</span><span class="plain-syntax">,            </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"destroy-function"</span><span class="plain-syntax">,               </span><span class="constant-syntax">destroy_function_KCC</span><span class="plain-syntax">,               </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"make-mutable-function"</span><span class="plain-syntax">,          </span><span class="constant-syntax">make_mutable_function_KCC</span><span class="plain-syntax">,          </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"hash-function"</span><span class="plain-syntax">,                  </span><span class="constant-syntax">hash_function_KCC</span><span class="plain-syntax">,                  </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"long-block-size-function"</span><span class="plain-syntax">,       </span><span class="constant-syntax">long_block_size_function_KCC</span><span class="plain-syntax">,       </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"serialise-function"</span><span class="plain-syntax">,             </span><span class="constant-syntax">serialise_function_KCC</span><span class="plain-syntax">,             </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"unserialise-function"</span><span class="plain-syntax">,           </span><span class="constant-syntax">unserialise_function_KCC</span><span class="plain-syntax">,           </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"comparison-schema"</span><span class="plain-syntax">,              </span><span class="constant-syntax">comparison_schema_KCC</span><span class="plain-syntax">,              </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"compatible-with"</span><span class="plain-syntax">,                </span><span class="constant-syntax">compatible_with_KCC</span><span class="plain-syntax">,                </span><span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"conforms-to"</span><span class="plain-syntax">,                    </span><span class="constant-syntax">conforms_to_KCC</span><span class="plain-syntax">,                    </span><span class="constant-syntax">CONSTRUCTOR_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"plus-schema"</span><span class="plain-syntax">,                    </span><span class="constant-syntax">plus_schema_KCC</span><span class="plain-syntax">,                    </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"minus-schema"</span><span class="plain-syntax">,                   </span><span class="constant-syntax">minus_schema_KCC</span><span class="plain-syntax">,                   </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"times-schema"</span><span class="plain-syntax">,                   </span><span class="constant-syntax">times_schema_KCC</span><span class="plain-syntax">,                   </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"divide-schema"</span><span class="plain-syntax">,                  </span><span class="constant-syntax">divide_schema_KCC</span><span class="plain-syntax">,                  </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"remainder-schema"</span><span class="plain-syntax">,               </span><span class="constant-syntax">remainder_schema_KCC</span><span class="plain-syntax">,               </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"approximate-schema"</span><span class="plain-syntax">,             </span><span class="constant-syntax">approximate_schema_KCC</span><span class="plain-syntax">,             </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"negate-schema"</span><span class="plain-syntax">,                  </span><span class="constant-syntax">negate_schema_KCC</span><span class="plain-syntax">,                  </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"root-schema"</span><span class="plain-syntax">,                    </span><span class="constant-syntax">root_schema_KCC</span><span class="plain-syntax">,                    </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"cuberoot-schema"</span><span class="plain-syntax">,                </span><span class="constant-syntax">cuberoot_schema_KCC</span><span class="plain-syntax">,                </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"power-schema"</span><span class="plain-syntax">,                   </span><span class="constant-syntax">power_schema_KCC</span><span class="plain-syntax">,                   </span><span class="constant-syntax">SCHEMA_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"arithmetic-modulus"</span><span class="plain-syntax">,             </span><span class="constant-syntax">arithmetic_modulus_KCC</span><span class="plain-syntax">,             </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"dimensionless"</span><span class="plain-syntax">,                  </span><span class="constant-syntax">dimensionless_KCC</span><span class="plain-syntax">,                  </span><span class="constant-syntax">BOOLEAN_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"plural"</span><span class="plain-syntax">,                         </span><span class="constant-syntax">plural_KCC</span><span class="plain-syntax">,                         </span><span class="constant-syntax">VOCABULARY_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"singular"</span><span class="plain-syntax">,                       </span><span class="constant-syntax">singular_KCC</span><span class="plain-syntax">,                       </span><span class="constant-syntax">VOCABULARY_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"terms"</span><span class="plain-syntax">,                          </span><span class="constant-syntax">terms_KCC</span><span class="plain-syntax">,                          </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"index-priority"</span><span class="plain-syntax">,                 </span><span class="constant-syntax">index_priority_KCC</span><span class="plain-syntax">,                 </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"small-block-size"</span><span class="plain-syntax">,               </span><span class="constant-syntax">short_block_size_KCC</span><span class="plain-syntax">,               </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax">,</span>
<span class="plain-syntax">      </span><span class="string-syntax">"this command has been renamed 'short-block-size'"</span><span class="plain-syntax"> },</span>
<span class="plain-syntax">    { </span><span class="string-syntax">"short-block-size"</span><span class="plain-syntax">,               </span><span class="constant-syntax">short_block_size_KCC</span><span class="plain-syntax">,               </span><span class="constant-syntax">NUMERIC_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"invent-source-text"</span><span class="plain-syntax">,             </span><span class="constant-syntax">invent_source_text_KCC</span><span class="plain-syntax">,             </span><span class="constant-syntax">TEMPLATE_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"instance"</span><span class="plain-syntax">,                       </span><span class="constant-syntax">instance_KCC</span><span class="plain-syntax">,                       </span><span class="constant-syntax">TEXT_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="string-syntax">"apply-macro"</span><span class="plain-syntax">,                    </span><span class="constant-syntax">apply_macro_KCC</span><span class="plain-syntax">,                    </span><span class="constant-syntax">MACRO_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> },</span>

<span class="plain-syntax">    { </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">NO_KCA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> }</span>
<span class="plain-syntax">};</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>When processing a command, we parse it into one of the following structures:
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind_command_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">which_kind_command</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">boolean_argument</span><span class="plain-syntax">; </span><span class="comment-syntax"> where appropriate</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">numeric_argument</span><span class="plain-syntax">; </span><span class="comment-syntax"> where appropriate</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">textual_argument</span><span class="plain-syntax">; </span><span class="comment-syntax"> where appropriate</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ccm_argument</span><span class="plain-syntax">; </span><span class="comment-syntax"> where appropriate</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">vocabulary_argument</span><span class="plain-syntax">; </span><span class="comment-syntax"> where appropriate</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">constructor_argument</span><span class="plain-syntax">; </span><span class="comment-syntax"> where appropriate</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind_template_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">template_argument</span><span class="plain-syntax">; </span><span class="comment-syntax"> where appropriate</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind_macro_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">macro_argument</span><span class="plain-syntax">; </span><span class="comment-syntax"> where appropriate</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">origin</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">defined_for</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">completed</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure single_kind_command is accessed in 4/nf, 4/st, 4/kc and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Parsing single kind commands.</b>Each command is read in as text, parsed and stored into a modest structure.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">additional_property_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">additional_property_set_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>

<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">additional_property_set</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">properties</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">additional_property</span></span>
<span class="plain-syntax">    </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">additional_property_set</span><span class="plain-syntax">;</span>

<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">additional_property</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">attr</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">property_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value_text</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">additional_property</span><span class="plain-syntax">;</span>

<span class="reserved-syntax">additional_property_set</span><span class="plain-syntax"> *</span><span class="function-syntax">NeptuneSyntax::new_additional_property_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner_name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">additional_property_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">additional_property_set</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">set</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owner_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">owner_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">set</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">properties</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">additional_property</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">set</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

<span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="function-syntax">NeptuneSyntax::parse_command</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">NeptuneSyntax::parse_command</span></span>:<br/>Neptune Files - <a href="4-nf.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">single_kind_command</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Initialise the STC to a blank command</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>

<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"}"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::recording</span></a><span class="plain-syntax">()) </span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::recording</span></a><span class="plain-syntax">()) </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">additional_property_set_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        }</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::recording</span></a><span class="plain-syntax">()) {</span>
<span class="plain-syntax">        </span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::record_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">) == </span><span class="character-syntax">'{'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">additional_property_set_described</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">            </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">                </span><span class="identifier-syntax">I</span><span class="string-syntax">"previous declaration not closed with '}'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">additional_property_set_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        }</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"properties of (%c+) {"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">additional_property_set_described</span><span class="plain-syntax"> =</span>
<span class="plain-syntax">                </span><a href="4-ns.html#SP5" class="function-link"><span class="function-syntax">NeptuneSyntax::new_additional_property_set</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax">        } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"invention (%C+) {"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">            </span><a href="4-st.html#SP2" class="function-link"><span class="function-syntax">StarTemplates::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"macro (#%C+) {"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">            </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"(%C+) (%C+) (%C+) {"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">            </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">should_know</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">            </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"new"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">should_know</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">            </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"builtin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">should_know</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">            </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">should_know</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">)</span>
<span class="plain-syntax">                </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">                    </span><span class="identifier-syntax">I</span><span class="string-syntax">"declaration must begin 'new' or 'builtin'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">            </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">                </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax">                </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"punctuation"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">PUNCTUATION_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax">                </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"protocol"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">PROTOCOL_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax">                </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"base"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">BASE_CONSTRUCTOR_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax">                </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">I</span><span class="string-syntax">"constructor"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="constant-syntax">PROPER_CONSTRUCTOR_GRP</span><span class="plain-syntax">;</span>
<span class="plain-syntax">                </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">group</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax">                    </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">                        </span><span class="identifier-syntax">I</span><span class="string-syntax">"must declare 'variable', 'protocol', 'base' or 'constructor', or 'property'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">                </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">                    </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax">                    </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Create a new constructor</span><span class="named-paragraph-number">5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">                }</span>
<span class="plain-syntax">            }</span>
<span class="plain-syntax">        } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">            </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">                </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed declaration line"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        }</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">) == </span><span class="character-syntax">':'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"trailing colon was unexpected"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">)</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">)</span>

<span class="plain-syntax">        </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">Parse line into command and argument, divided by a colon</span><span class="named-paragraph-number">5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">additional_property_set_described</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_4" class="named-paragraph-link"><span class="named-paragraph">Handle as an additional property setting</span><span class="named-paragraph-number">5.4</span></a></span>
<span class="plain-syntax">        </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5" class="named-paragraph-link"><span class="named-paragraph">Handle as a kind constructor setting</span><span class="named-paragraph-number">5.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">)</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">)</span>

<span class="plain-syntax">    }</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure additional_property_set is private to this section.</li><li>The structure additional_property is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialise the STC to a blank command</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">boolean_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">numeric_argument</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">ccm_argument</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">vocabulary_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">constructor_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">macro_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">template_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">origin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">defined_for</span><span class="plain-syntax"> = </span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2" class="paragraph-anchor"></a><b>&#167;5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new constructor</span><span class="named-paragraph-number">5.2</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">do_know</span><span class="plain-syntax"> = </span><a href="2-fk.html#SP11" class="function-link"><span class="function-syntax">FamiliarKinds::is_known</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">do_know</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">should_know</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">))</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kind command describes kind with no known name"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">do_know</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">should_know</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kind command describes already-known kind"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> =</span>
<span class="plain-syntax">        </span><a href="4-kc2.html#SP11" class="function-link"><span class="function-syntax">KindConstructors::new</span></a><span class="plain-syntax">(</span><a href="2-knd.html#SP14" class="function-link"><span class="function-syntax">Kinds::get_construct</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">), </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">group</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEW_BASE_KINDS_CALLBACK</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CON_KIND_VARIABLE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax">        (</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CON_INTERMEDIATE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">NEW_BASE_KINDS_CALLBACK</span><span class="plain-syntax">(</span>
<span class="plain-syntax">            </span><a href="2-knd.html#SP6" class="function-link"><span class="function-syntax">Kinds::base_construction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">constructor_described</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    }</span>
<span class="plain-syntax">    #</span><span class="identifier-syntax">endif</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>&#167;5.3. </b>Spaces and tabs after the colon are skipped; so a textual argument cannot
begin with those characters, but that doesn't matter for the things we need.
</p>

<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse line into command and argument, divided by a colon</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">" *(%c+?) *: *(%c+?) *"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kind command without argument"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    }</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4" class="paragraph-anchor"></a><b>&#167;5.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Handle as an additional property setting</span><span class="named-paragraph-number">5.4</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">attr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"attribute"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">attr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"property"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">attr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">attr</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">I</span><span class="string-syntax">"only 'attribute' and 'property' commands are allowed here"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">additional_property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">additional_property</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">attr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">attr</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"(%C+?) *= *(%c+)"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">            </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">attr</span><span class="plain-syntax">)</span>
<span class="plain-syntax">                </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">                    </span><span class="identifier-syntax">I</span><span class="string-syntax">"only 'property' commands can use '='"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">property_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">value_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax">        } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">property_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">value_text</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">attr</span><span class="plain-syntax">)?</span><span class="identifier-syntax">I</span><span class="string-syntax">"1"</span><span class="plain-syntax">:</span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        }</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">property_name</span><span class="plain-syntax">) == </span><span class="character-syntax">'~'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">            </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">attr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">                </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">property_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">                </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">value_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">;</span>
<span class="plain-syntax">            } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">                </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">whole_command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">                    </span><span class="identifier-syntax">I</span><span class="string-syntax">"only 'attribute' commands can use '~'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">            }</span>
<span class="plain-syntax">        }</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">additional_property</span><span class="plain-syntax">, </span><span class="identifier-syntax">additional_property_set_described</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">properties</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    }</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5" class="paragraph-anchor"></a><b>&#167;5.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Handle as a kind constructor setting</span><span class="named-paragraph-number">5.5</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_1" class="named-paragraph-link"><span class="named-paragraph">Identify the command being used</span><span class="named-paragraph-number">5.5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">operand_type</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BOOLEAN_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_2" class="named-paragraph-link"><span class="named-paragraph">Parse a boolean argument for a kind command</span><span class="named-paragraph-number">5.5.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CCM_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_3" class="named-paragraph-link"><span class="named-paragraph">Parse a CCM argument for a kind command</span><span class="named-paragraph-number">5.5.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTRUCTOR_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_8" class="named-paragraph-link"><span class="named-paragraph">Parse a constructor-name argument for a kind command</span><span class="named-paragraph-number">5.5.8</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MACRO_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_10" class="named-paragraph-link"><span class="named-paragraph">Parse a macro name argument for a kind command</span><span class="named-paragraph-number">5.5.10</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMERIC_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_7" class="named-paragraph-link"><span class="named-paragraph">Parse a numeric argument for a kind command</span><span class="named-paragraph-number">5.5.7</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEMPLATE_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_9" class="named-paragraph-link"><span class="named-paragraph">Parse a template name argument for a kind command</span><span class="named-paragraph-number">5.5.9</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEXT_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_4" class="named-paragraph-link"><span class="named-paragraph">Parse a textual argument for a kind command</span><span class="named-paragraph-number">5.5.4</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SCHEMA_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_5" class="named-paragraph-link"><span class="named-paragraph">Parse a schema argument for a kind command</span><span class="named-paragraph-number">5.5.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VOCABULARY_KCA:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ns.html#SP5_5_6" class="named-paragraph-link"><span class="named-paragraph">Parse a vocabulary argument for a kind command</span><span class="named-paragraph-number">5.5.6</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_1" class="paragraph-anchor"></a><b>&#167;5.5.1. </b>The following is clearly inefficient, but is not worth optimising. It makes
about 20 string comparisons per command, and there are about 600 commands in a
typical run of Inform, so the total cost is about 12,000 comparisons with
quite small strings as arguments &mdash; which is negligible for our purposes,
so we neglect it.
</p>

<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Identify the command being used</span><span class="named-paragraph-number">5.5.1</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">table_of_kind_commands</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">text_of_command</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_narrow_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">table_of_kind_commands</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">text_of_command</span><span class="plain-syntax">))</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">table_of_kind_commands</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>

<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"no such kind command"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    }</span>

<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">opcode_number</span><span class="plain-syntax"> == -1) {</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"%s: %s"</span><span class="plain-syntax">,</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_of_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">warning_if_used</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
<span class="plain-syntax">        </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    }</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">warning_if_used</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"%s: %s"</span><span class="plain-syntax">,</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_of_command</span><span class="plain-syntax">, </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">which_kind_command</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">warning_if_used</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::warning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">)</span>
<span class="plain-syntax">    }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_2" class="paragraph-anchor"></a><b>&#167;5.5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a boolean argument for a kind command</span><span class="named-paragraph-number">5.5.2</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"yes"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">boolean_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"no"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">boolean_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"boolean kind command takes yes/no argument"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_3" class="paragraph-anchor"></a><b>&#167;5.5.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a CCM argument for a kind command</span><span class="named-paragraph-number">5.5.3</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"none"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">ccm_argument</span><span class="plain-syntax"> = </span><span class="constant-syntax">NONE_CCM</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"literal"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">ccm_argument</span><span class="plain-syntax"> = </span><span class="constant-syntax">LITERAL_CCM</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"quantitative"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">ccm_argument</span><span class="plain-syntax"> = </span><span class="constant-syntax">NAMED_CONSTANT_CCM</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"special"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">ccm_argument</span><span class="plain-syntax"> = </span><span class="constant-syntax">SPECIAL_CCM</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">,</span>
<span class="plain-syntax">            </span><span class="identifier-syntax">I</span><span class="string-syntax">"kind command with unknown constant-compilation-method"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_4" class="paragraph-anchor"></a><b>&#167;5.5.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a textual argument for a kind command</span><span class="named-paragraph-number">5.5.4</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_5" class="paragraph-anchor"></a><b>&#167;5.5.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a schema argument for a kind command</span><span class="named-paragraph-number">5.5.5</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">U</span><span class="string-syntax">"(%c*?)&gt;&gt;&gt;(%c+)"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">constructor_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax">    } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">textual_argument</span><span class="plain-syntax">, </span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    }</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_6" class="paragraph-anchor"></a><b>&#167;5.5.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a vocabulary argument for a kind command</span><span class="named-paragraph-number">5.5.6</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">vocabulary_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">feed_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::begin</span><span class="plain-syntax">();</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::end</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) &gt;= </span><span class="constant-syntax">30</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"too many words in kind command"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    } </span><span class="reserved-syntax">else</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">vocabulary_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_7" class="paragraph-anchor"></a><b>&#167;5.5.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a numeric argument for a kind command</span><span class="named-paragraph-number">5.5.7</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">numeric_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_8" class="paragraph-anchor"></a><b>&#167;5.5.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a constructor-name argument for a kind command</span><span class="named-paragraph-number">5.5.8</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">constructor_argument</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_9" class="paragraph-anchor"></a><b>&#167;5.5.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a template name argument for a kind command</span><span class="named-paragraph-number">5.5.9</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">template_argument</span><span class="plain-syntax"> = </span><a href="4-st.html#SP1" class="function-link"><span class="function-syntax">StarTemplates::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">template_argument</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unknown template name in kind command"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5_10" class="paragraph-anchor"></a><b>&#167;5.5.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse a macro name argument for a kind command</span><span class="named-paragraph-number">5.5.10</span></span><span class="comment-syntax"> =</span>
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">    </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">macro_argument</span><span class="plain-syntax"> = </span><a href="4-mcr.html#SP1" class="function-link"><span class="function-syntax">NeptuneMacros::parse_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argument</span><span class="plain-syntax">);</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">macro_argument</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">        </span><a href="4-nf.html#SP2" class="function-link"><span class="function-syntax">NeptuneFiles::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unknown template name in kind command"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">        </span><span class="identifier-syntax">stc</span><span class="plain-syntax">.</span><span class="element-syntax">completed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">stc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ns.html#SP5_5">&#167;5.5</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
    <ul class="progressbar"><li class="progressprev"><a href="4-nf.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-km.html">1</a></li><li class="progresschapter"><a href="2-knd.html">2</a></li><li class="progresschapter"><a href="3-dmn.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-abgtn.html">abgtn</a></li><li class="progresssection"><a href="4-nf.html">nf</a></li><li class="progresscurrent">ns</li><li class="progresssection"><a href="4-mcr.html">mcr</a></li><li class="progresssection"><a href="4-st.html">st</a></li><li class="progresssection"><a href="4-kc.html">kc</a></li><li class="progresssection"><a href="4-kc2.html">kc2</a></li><li class="progressnext"><a href="4-mcr.html">&#10095;</a></li></ul></div>
</nav><!-- End of weave -->

		</main>
	</body>
</html>

